package com.ds.lens.data.vo.in.v2.monitor;

import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

/**
 * @author WeiShaoying
 * @date 2019/11/6 下午2:42
 */
@Setter
@Getter
public class LensMonitorDefineInVO {

    /**
     * 操作符：1大于、2大于等于、3小于、4小于等于
     */
    @NotNull(message = "操作不能为空")
    @Range(min = 1, max = 4, message = "操作方法异常")
    private Integer operator;


    /**
     * 阈值类型0至少 1全部
     */
    @NotNull(message = "阈值类型不能为空")
    private Integer thresholdType;

    /**
     * 阈值数量
     */
    @NotNull(message = "阈值数量不能为空")
    @Min(value = 1)
    private Integer thresholdNumber;

    /**
     * 窗口类型：1翻滚窗口、2滑动窗口
     */
    @NotNull(message = "窗口类型不能为空")
    @Range(min = 1, max = 2, message = "窗口类型异常")
    private Integer windowType;

    /**
     * 窗口时间
     */
    @NotNull(message = "窗口时间不能为空")
    private Integer windowTime;

    /**
     * 在…...的期间
     */
    @NotNull(message = "在…...的期间不能为空")
    private Integer during;

    /**
     * 阈值级别
     */
    @NotEmpty(message = "阈值级别不能为空")
    private Map<String, Object> thresholdLevel;

    /**
     * 通知数据丢失
     */
    @NotNull(message = "通知数据丢失不能为空")
    private Boolean notifyDataMissing;

    /**
     * 延迟计算时间
     */
    @NotNull(message = "延迟计算时间不能为空")
    private Integer delayTime;

    /**
     * 检测范围
     */
    private Map<String, Object> scope;

    /**
     * 指标名称
     */
    @NotEmpty(message = "指标名称不能为空")
    private String metricName;

    /**
     * 指标过滤条件
     */
    private Map<String, Object> metricFilter;

    /**
     * 指标聚合
     */
    @NotNull(message = "指标聚合不能为空")
    private Integer metricAggr;

    /**
     * 指标分组
     */
    private List<String> metricBy;
}
